阅读更多

4顶
0踩

编程语言
Raymond 此文不是在泛泛地去谈语言的优劣,而是要回答一个问题:在UNIX下开发开源项目,如何选择开发工具?我翻译的很零散,建议大家去看原文。

C 语言

虽说C语言在内存管理方面存在严重的缺陷,不过它还是在某些应用领域里称王称霸。对于那些要求最高的效率,良好的实时性,或者与操作系统内核紧密关联的程序来说,C仍然是很好的选择。

C良好的可移植性也为它加了分。不过现在很多其他的语言可移植性越来越好,C在这方面的优势可能会逐渐丧失。

现有的很多程序可以产生非常棒的C代码,比如语法分析器、GUI Builder等,这时候C语言也是有吸引力的,因为你所需要编写的代码只是整个程序的一小部分。

再有,我们当然应该认识道,C语言对于程序员来说具有无可替代的价值。就我这里讨论的每一种语言而论,只要你发掘的足够深,到最后你会看到它们的内核都是用纯正的、可移植的C写成的。

到了今天这个时候,我们最好把C看成是UNIX虚拟机上的高级汇编语言。

就算是其他的高级语言完全可以满足你的工作需要,抽出时间来学习C语言也仍然有益,它能帮助你在硬件体系的层次上思考问题。

即使到了今天,最好的C语言教程仍然是1988年出版的K&R第二版The C Programming Language.

总结:C最出色的地方在于其高效和贴近机器,最糟糕的地方在它的内存管理地狱。

C++

C++最初发布于1980年代中期,当时面向对象语言被认为是解决软件复杂性问题的银弹。C++的面向对象特性看相去使其全面超越了C,支持者认为C++将迅速把上一代语言挤到陈列馆里去。

但是历史并非如此。究其原因,至少有一部分归咎于C++本身。为了与C兼容,C++被迫作出了很多重大的设计妥协,结果导致语言过分华丽,过分复杂。为了与C兼容,C++并没有采用自动内存管理的策略,从而丧失了修正C最严重问题的机会。

另外一部分原因,恐怕要算到面向对象身上。看起来OO并没有很好的达成人们当年的预期。我就这个问题调研过,我发现使用OO方法导致组件之间出现很厚的粘合层,并且带来了严重的可维护性问题。今天让我们来看看开放源码社区,你会发现C++的应用还是集中在GUI,游戏和多媒体工具包这些方面,在其他地方很少用到。要知道,面向对象也只是在这些领域被证明非常成功,而开放源码社区的选择,很大程度上体现了程序员的自由意志,而不是公司管理层的胡乱指挥。

也许C++实现OO的方法有问题。有证据表明C++程序在整个生命周期的开销高于相应的C, Fortran和Ada程序。不过,究竟这是否应该归咎与C++的OO实现上,还不清楚。

最近几年,C++加入了很多非OO的思想,其异常思想类似Lisp,STL的出现是非常了不起的。

其实C++最根本的问题在于,它基本上只不过是另一种传统的语言。STL中的内存管理比先前的new/delete和C的方案要好的多,但是还是没有解决问题。对于很多应用程序而言,其OO特性并不明显,相比与C,除了增加复杂度之外没有获得很多好处。

总结:C++优点在于作为编译型语言,把效率与泛型和面向对象特性结合起来,其缺点在于过于华丽复杂,倾向于鼓励程过分复杂的设计。

Java

Java的设计很聪明,它采用了自动内存管理,这是最大的改进,支持OO设计带来的好处虽然不那么突出,不过也很值得赞赏,相比C++,其OO设计规模小而且简单 。

相对于Python而言,Java有一些明显的失误。有些地方设计的还是太复杂,甚至有缺陷。Java的类可见性和隐式scoping规则太复杂了。Interface机制是为了避免多继承带来的问题而设计的,但是要理解和使用它还是挺难。内部类和匿名类导致令人困惑的代码。缺乏有效的析构机制,使得除了内存之外的其他资源(比如互斥量和锁)管理起来很困难。Java的线程不可靠,其I/O机制很强大,但是读取一个文本文件却非常繁琐。

Java没有管理库版本的机制,从而形式上重蹈了了Windows DLL地狱的覆辙。在类似应用服务器这样的环境里,这引起了大量的问题。

总体而言,我们可以说除了系统编程和对效率要求极高的程序之外,Java在大部分领域优于C++。经验表明,Java程序员似乎不太容易象C++程序员那样构造过度的OO层,不过在Java中这仍然是个严重问题。

Java是否优于诸如Perl, Python这样的语言?我们还不是很清楚,很大程度上似乎跟程序规模有关。其擅长的领域基本上于Python相似,在效率上无法跟C/C++相提并论,在小规模的、大量使用模式匹配和编辑的项目里也无法匹敌Perl。在小项目里,Java显得过分强大了。我们猜测Python更适合小项目,而Java适合大项目,不过这一点并没有得到有力的证明。

Python

Python是一种脚本语言,可以与C紧密整合。它可以与动态加载的C库模块交换数据,也可以作为内嵌脚本语言而从C中调用。其语法类似C和模块化语言的杂合,不过有一个独一无二的特征,就是以缩进来确定语句块。

Python语言非常干净,设计优雅,具有出色的模块化特性。它提供了面向对象能力,但不强迫用户进行面向对象设计。其类型系统提供了强大的表达能力,类似Perl,具有匿名lambda表达式,这点又让Lisp黑客们感到亲切。Python依靠Tk提供方便的GUI界面开发能力。

在所有的解释型语言里,Python和Java最适合多名程序员以渐进方式协同开发大型项目。在很多方面,Python比Java要简单,它非常适合与构造快速原型,这一点使得它对于Java有独特优势:对于那些既不很复杂,又不要求高效率的程序,Python十分合适。

Python的速度没法跟C/C++相比,不过在今天的高速CPU上,合理地使用混合语言编程策略使得Python的上述弱点被有效地弥补。事实上,Python几乎被认为是主流脚本语言中最慢的一个,因为它提供了动态多态性。在大量使用正则表达式的小型项目,它逊于Perl。对于微型项目而言,shell和Tcl可能更好,Python显得太过强大了。

总结:Python最出色的地方在于,它鼓励清晰易读的代码,特别适合以渐进开发的方式构造大项目。其缺陷在于效率不高,太慢,不但跟编译语言相比慢,就是跟其他脚本语言相比也显得慢。
来自: CSDN博客
4
0
评论 共 3 条 请登录后发表评论
3 楼 dieslrae 2014-12-22 00:18
ykssky 写道
Python的缩进灰常蛋疼...

有没有见过几千行没有缩进的代码,手贱格式化之后还不能跑了...
2 楼 clia 2014-12-20 03:34
怎么没有Ruby, PHP, JavaScript, Go, Dart?
1 楼 ykssky 2014-12-18 23:54
Python的缩进灰常蛋疼...

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • .net Framework框架工作原理

    net Framework框架工作原理,细致的描述了net Framework框架工作原理

  • ASP.NET下MVC设计模式的实现

      ASP.NET是微软最新推出的新型体系结构.NET框架的一部分,它为构造新一代动态网站和基于网络的分布式应用提供了强有力的支持。与以前的 Web 开发模型相比,ASP.NET 提供了许多重要的优点例如: 简易性;安全性;可管理性等。而且与基于过程的ASP页面技术相比,面向对象技术在ASP.NET中得到了完全实现。用传统ASP技术建立的Web应用实例中,在页面中同时实现显示,业务逻辑和流程控制,

  • 简单的MVC框架实现

    1.MVC(Model View Controller) MVC是什么? 是一种软件架构思想、其核心思想是,要将数据处理与数据展现分开,按照这种思想,可以将一个软件划分成三种不同类型的模块,分别是模型、视图和控制器。 模型负责数据处理(业务逻辑)、视图负责数据展现(表示逻辑)、控制器负责协调模型和视图(请求要先发送给控制器,由控制器选择对应的模型来处理;模型返回的处理结果也要先发送给控制器,由控制...

  • Asp.Net Mvc 运行机制原理分析

    最近一段时间接手过的项目都是基于Asp.Net的,以前对aspnet运行机制有一个大概的了解,总觉得不够透彻,按自己的理解来分析一下。 Asp.Net 运行机制 理解mvc运行原理的前提是要了解aspnet运行原理,这方面网上资料多如牛毛,我这里就大致说一下aspnet生命周期 Http请求到IIS后,如果是静态资源则IIS读取后返回客户端,动态请求被isap.dll 转发自net托管平...

  • .net Mvc框架原理

    .net Mvc框架原理 本文只是简要说明原理,学习后的总结。 1.当一个Http请求发送后会被URLRoutingModule拦截(这时候也就是正式进入管道,下章会讲管道事件) 2.这时根据IsapiWorkerRequest对象,HttpRuntime会创建相当于Http请求的上下文(Context):HttpContext 3.封装HttpContext,变成HttpContextW...

  • ASP.NET MVC 入门1、简介

    什么是MVC模式 MVC(Model-View-Controller,模型—视图—控制器模式)用于表示一种软件架构模式。它把软件系统分为三个基本部分:模型(Model),视图(View)和控制器(Controller)。 那么MVC模式和我们熟悉的WebForm模式有什么不同呢?他的各个部分又是怎样分工的呢? 我们先来看一下普通的WebForm模式下,我们请求一个例如http://...

  • MVC框架基本工作原理

    MVC工作原理 Model 模型层,一般对数据的处理会放在这层 View 视图层,渲染html页面,展示给用户 Controller 控制器层,处理逻辑,调用Model和view的相关方法 单一入口的工作原理 用一个处理程序文件处理所有HTTP请求,根据请求时的参数的不同区分不同模块和操作请求 模板引擎的理解 ...

  • ASP.NET MVC——CodeFirst开发模式

       Entity Framework框架提供了几种开发模式,比如Database First,Model First,Code First。Database First是最老也是应用得最广泛的一种设计方式。Database First这种方式的设计高度依赖于数据库中表的结构,根据表及表间的关系来创建模型。如果后期需求有所变更或者功能有很大变化的话,需要涉及到更改数据库所付出的代价将会很大,因为之前编写好的代码将不再适用于新的表,我们必需重构以更改代码中的逻辑以适应更改之后的表。Model First是创.

  • MVC设计模式实现登陆程序

    一: MVC简介: MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。 MVC模式的目的:实现一种动态的程序设计,使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能。除此之外,此模式通过对复杂度的简化,使程序结构更加直观。软件系统通过对自身基本

  • MVC设计模式简介

    MVC 设计模式一般指 MVC 框架,M(Model)指数据模型层,V(View)指视图层,C(Controller)指控制层。使用 MVC 的目的是将 M 和 V 的实现代码分离,使同一个程序可以有不同的表现形式。其中,View 的定义比较清晰,就是用户界面。 在 Web 项目的开发中,能够及时、正确地响应用户的请求是非常重要的。用户在网页上单击一个 URL 路径,这对 Web 服务器来说,相当于用户发送了一个请求。而获取请求后如何解析用户的输入,并执行相关处理逻辑,最终跳转至正确的页面显示反馈结果,这些

  • MVC各层的典型实现

    模型层Model的典型实现 功能 模型层的典型代码模式 控制器调用模型层获取数据的典型做法 基础模型类 实现模型类的单例模型工厂 整个模型层的类库结构图 控制器层Controller的典型实现 控制器的作用 控制器类的常规做法 控制器的划分 控制器的动作 基础控制器类 视图层View的典型实现 功能 数据分类

  • ASP的2种开发模式

    一、ASP.Net的两种开发模式 1.1 ASP.Net WebForm的开发模式 (1)处理流程 在传统的WebForm模式下,我们请求一个例如http://www.aspnetmvc.com/blog/index.aspx的URL,那么我们的WebForm程序会到网站根目录下去寻找blog目录下的index.aspx文件,然后由index.aspx页面的CodeBeh

  • asp.net简述MVC开发模式

    详情请参考:http://www.runoob.com/aspnet/mvc-intro.html 1.MVC 是三种 ASP.NET 编程模式中的一种。MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式。 2.MVC- 应用程序文件夹 所有的 MVC 应用程序的文件夹名称都是相同的。MVC 框架是基于默认的命名...

  • ASP.NET MVC底层原理与框架

    前言鄙人有一毛病,喜欢钻研原理性的东西,感觉只知道怎么用还不太够,更想知道如何实现的以及为什么会这样。 暑假的时候做积分系统是第一次接触MVC,感觉MVC就是一个框架,分为Module ,view和controller,浏览器传过来的信息先到达controller,controller处理逻辑调用module,返回合适的view,当时对框架特别模糊,现在稍微好点,但是还是不太清楚,有明白的欢迎评论

  • 有关ASP.NET MVC框架的一些基础知识

    长时间以来,MVC是一种为众多开发人员所熟悉的标准设计模式。本文介绍有关ASP.NET MVC框架的一些基础知识,针对ASP.NET 3.5。 MVC(模型—视图—控制器)结构模式把一个应用程序拆分成三个主要组件:模型、视图和控制器。在创建基于MVC框架的Web应用程序时,你可以把ASP.NET MVC框架作为ASP.NET Web表单模式方案的一种重要候选。较之于基于Web表单的应用程序,AS...

  • MVC模式在ASP.NET中的应用

    MVCApplication.zipMVCTest.zip介绍 在网上搜寻了很长时间后却不能够找到一个演示ASP.NET的MVC模型的例子. 于是我实现了一个很好的能够领略MVC模型的简单实例.有关 MVC在一个传统的应用程序中,一个单一代码要处理所有事物。 藉由MVC模型,你可以将你的应用程序有机的分成三个协作的部份: 模型,视图和控制器。视图是直接面向用户使用的部份。它格式化数据使

  • ASP.NET MVC企业级程序设计 第1章 初探asp.net mvc

    一、ASP.NET MVC简介 1、为什么需要MVC设计模式(ASP.NET WebForm的缺点) 1)后端程序逻辑与前端UI高耦合 2)视图状态管理等机制导致网络带宽占用增加 2、适用场景: 1) ASP.NET WebForm适用于基于局域网的web应用程序(ERP, HR, CRM等企业内部管理系统) 2) ASP.NET MVC适用于基于因特网、高并发的中、大型web应用程序(门户网站、电商等) 3、主要概念: 1)组成:Model(模型)、View(视图)和Controller(控制器) Mod

  • MVC开发模式详解

    MVC设计模式详解 1.Model-View-Controller(模型-视图-控制器)    MVC设计模式实际上强制性地将程序的输入、处理、和输出分开。    Model-View-Controller实际上担当着不同的角色。    Model:代表着业务数据和业务逻辑处理,(主要包括业务逻辑模块(web项目中的dao类)和数据模块(model类)和JavaBean相同,由Model

Global site tag (gtag.js) - Google Analytics